<?php
/**
 * Esse script gera o backup de relatórios que somente operadores podem acessar
 */

include_once 'src/util/config.php'; 

//Obtendo controlador geral e auxiliar
$config = Config::getInstance();

//Verificando se existe um usuário logado
if(!$config->isLoged()){
    echo "Voce precisa estar logado para executar essa funcao";
    exit(0);
}

//Verificando se o usuário logado é um operador
if($_SESSION[SESSION_PERFIL_FUNC] != PERFIL_OPERADOR){
    echo "Voce nao ter perfil para essa funcao";
    exit(0);
}

//Incluindo controladores usados no script
include_once CONTROLLERS."regiao.php";
include_once CONTROLLERS."funcionario.php";
$regiao_controller  = new RegiaoController();
$func_controller    = new FuncionarioController();

//Obtendo identificador da loja do usuário logado
$loja_id = $_SESSION[SESSION_LOJA_FUNC];

//Captando todos os cobradores
$cobradores = $func_controller->getAllCobradores($loja_id);

//Criando a data limite dos relatórios (3 dias à mais do que a data atual)
$limite = date("Y-m-d", strtotime("+3 days"));

//Criando o diretório
$id     = md5(date("Y-m-d H:i:s:u"));
$folder = "$id/";

/**
 * Remove todos os arquivos de uma pasta
 * @param string $folder caminho da pasta a ser limpada
 */
function clearFolder($folder){
    if(file_exists($folder)){
        $files = array_diff(scandir($folder), array(".",".."));
        foreach ($files as $file){
            unlink($folder.$file);
        }
        rmdir ($folder);
    }
}

//Criando o diretório de backup
mkdir($folder);

//Carregando o controlador de regiões como controlador padrão desse script
$config->loadCurrentController('regiao');
define("NO_REL", true);

//Criando os relatórios para cada cobrador
foreach($cobradores as $c){
    
    //Obtem todas as regiões do cobrador
    $regioes = $regiao_controller->getRegioesByCobrador($c->id);
    
    foreach ($regioes as $r) {
        
        $_REQUEST["limite"] = $limite;
        $_REQUEST["regiao"] = $r->id;
        
        //Iniciando buffer
        ob_start(); 

        ?>
        <!DOCTYPE html>
        <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
                <title> Relatório Optica Capital</title>
            </head>
            <body> 
                <?php
                include PRINTERS."relat-cobra.php";
                ?>
            </body>
        </html>
        <?php
        
        //Obtendo e limpando o buffer
        $html = ob_get_clean();
        
        //Criando o arquivo do relatório na pasta atual dos relatórios
        file_put_contents($folder.$c->nome."-".$r->nome.".html", $html);
        
    }
    
}

//Criando o arquivo zipado
$zip        = new ZipArchive();

$zip_name   = "RELCOB-".$_SESSION[SESSION_LOJA_SIGLA_FUNC]."_".date("Y-m-d")."_$limite.zip";

if ($zip->open($zip_name, ZIPARCHIVE::CREATE) !== true) {
    //Falha ao criar o arquivo zipado
    //Limando diretório
    clearFolder($folder);
    //Exibindo mensagem de falha
    exit("Não foi possível abrir <$zip_name>\n");
}

//Obtendo arquivos do diretório atual dos relatórios
$files = array_diff(scandir($folder), array(".",".."));
foreach($files as $file){
    $zip->addFile($folder.$file, $file);
}
//Concluindo a compactação dos arquivos
$zip->close();

//Limpando diretório dos relatórios
clearFolder($folder);

//Elaborando o download do arquivo zipado
header("Content-Type: application/zip");
header("Content-Length: ".filesize($zip_name)); 
header("Content-Disposition: attachment; filename=".basename($zip_name));

readfile($zip_name);

unlink($zip_name);

?>
